event controller: Don't deliver events to insensitive widgets
authorMatthias Clasen <mclasen@redhat.com>
Thu, 2 May 2019 19:11:30 +0000 (19:11 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 2 May 2019 19:50:44 +0000 (15:50 -0400)
This is another way to avoid delivering events
to insensitive widgets.

gtk/gtkeventcontroller.c

index aed43c3d5e85cd203a36b4384aee096a7976dab7..4cfb498f2f4c32cf185dac816f1d6b7cd199b640 100644 (file)
@@ -63,6 +63,7 @@ gtk_event_controller_set_widget (GtkEventController *self,
   GtkEventControllerPrivate *priv = gtk_event_controller_get_instance_private (self);
 
   priv->widget = widget;
+  priv->responsive = gtk_widget_get_sensitive (widget);
 }
 
 static void
@@ -73,6 +74,18 @@ gtk_event_controller_unset_widget (GtkEventController *self)
   priv->widget = NULL;
 }
 
+static gboolean
+gtk_event_controller_filter_event_default (GtkEventController *self,
+                                           const GdkEvent     *event)
+{
+  GtkEventControllerPrivate *priv = gtk_event_controller_get_instance_private (self);
+
+  if (priv->widget)
+    return !gtk_widget_get_sensitive (priv->widget);
+
+  return FALSE;
+}
+
 static gboolean
 gtk_event_controller_handle_event_default (GtkEventController *self,
                                            const GdkEvent     *event)
@@ -128,7 +141,7 @@ gtk_event_controller_class_init (GtkEventControllerClass *klass)
 
   klass->set_widget = gtk_event_controller_set_widget;
   klass->unset_widget = gtk_event_controller_unset_widget;
-  klass->filter_event = gtk_event_controller_handle_event_default;
+  klass->filter_event = gtk_event_controller_filter_event_default;
   klass->handle_event = gtk_event_controller_handle_event_default;
 
   object_class->set_property = gtk_event_controller_set_property;